关于源(仓库,repository)

仓库(repository)是一个预备好的目录(安装镜像文件iso就可以作为这样一个仓库,下面有如何把安装镜像iso文件作为一个仓库,安装我们在安装系统的时候没有安装的一些工具),或是一个网站,包含了软件包(RPM 软件包)和索引文件。

软件管理工具,例如yum,可以在仓库中自动地定位并获取正确的 RPM 软件包。这样,您就不必手动搜索和安装新应用程序和升级补丁了。只用一个命令,您就可以更新系统中所有软件,也可以根据指定搜索目标来查找安装新软件。

关于yum

与apt功能类似的rpm包管理系统,那就是yum。

yum的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决。yum的关键之处是要有可靠的repository,顾名思义,这是软件的仓库,它可以是http或ftp站点, 也可以是本地软件池,但必须包含rpm的header,header包括了rpm包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些 header并加以分析,才能自动化地完成余下的任务。

首 先,yum update,这一步是必须的,yum会从服务器的header目录下载rpm的header,放在本地的缓存中,这可能会花费一定的时间,但比起yum 给我们带来方便,这些时间的花费又算的了什么呢?header下载完毕,yum会判断是否有可更新的软件包,如果有,它会询问你的意见,是否更新,还是说 y吧,把系统始终up to date总是不错的,这时yum开始下载软件包并使用调用rpm安装,这可能要一定时间,取决于要更新软件的数目和网络状况,万一网络断了,也没关系,再 进行一次就可以了。升级完毕,以后每天只要使用yum check-update检查一下有无跟新,如果有,就用yum update进行跟新,时刻保持系统为最新,堵住一切发现的漏洞。

添加新的源

有一系列的服务器,为每个版本的 Fedora 分别提供了一些仓库。常用的这样的服务器有:

在自己系统中安装上海交通大学的Mirror站。首先输入打开终端输入su,输入密码,取得管理员权限。在该目录下编辑一个.repo文件/etc/yum.repos.d/sjtu.repo,sjtu.repo 中的内容如下所示:

[Fedora-ftp.sjtu.edu.cn]
name=Fedora 12 - i386
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/releases/12/Fedora/i386/os/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
[Everything-ftp.sjtu.edu.cn]
name=Everything 12 - i386
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/releases/12/Everything/i386/os/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
[updates-ftp.sjtu.edu.cn]
name=Fedora updates
baseurl=http://ftp.sjtu.edu.cn/fedora/linux/updates/12/i386/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora

在下次使用yum命令的时候,就会把该源加入到搜索路径下。你也可以使用yum makecache命令将这个源的索引表先下载到本地。

安装第三方仓库rpmfusion

rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
rpm -ivh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

常用yum命令

1.列出所有可更新的软件清单 命令:yum check-update
2.安装所有更新软件 命令:yum update
3.仅安装指定的软件 命令:yum install 软件名
例如:yum install gcc
4.仅更新指定的软件 命令:yum update 软件名
例如:yum update gcc
注:其实,如果系统已经安装了该软件,yum install和yum update达到的效果是一样的,他会检查在仓库里是否有该软件更新的版本。
5.列出所有已经安装的和可安裝的软件清单(Installed Packages   Available Packages) 命令:yum list
6.删除软件 命令:yum remove xxx,同安装一样,yum也会查询数据库,给出解决依赖关系的提示。 
7.使用YUM查找软件包 命令:yum search 
8.列出所有可更新的软件包 命令:yum list updates
9.列出所有已安装的软件包 命令:yum list installed
10.列出所有已安装但不在 Yum Repository 內的软件包 命令:yum list extras
11.列出所指定的软件包 命令:yum list 软件包
12.使用YUM获取软件包信息 命令:yum info 软件包
13.列出所有软件包的信息 命令:yum info
14.列出所有可更新的软件包信息 命令:yum info updates
15.列出所有已安裝的软件包信息 命令:yum info installed
16.列出所有已安裝但不在 Yum Repository 內的软件包信息 命令:yum info extras
17.列出软件包提供哪些文件 命令:yum provides 

yum详解

yum的header缓存

前面说过,在执行yum update命令的时候,这一步就是yum会从服务器的header目录下载rpm的header,放在本地的缓存中。例如,我的就是存放在下面的目录下:

[root@localhost 12]# pwd
/var/cache/yum/i386/12
[root@localhost 12]# ls
dvd_iso                     livna                   rpmfusion-nonfree-updates
Everything-ftp.sjtu.edu.cn  rpmfusion-free          updates
fedora                      rpmfusion-free-updates  updates-ftp.sjtu.edu.cn
Fedora-ftp.sjtu.edu.cn      rpmfusion-nonfree
[root@localhost 12]# du -sh *
25M     dvd_iso
120M    Everything-ftp.sjtu.edu.cn
129M    fedora
25M     Fedora-ftp.sjtu.edu.cn
8.0K    livna
3.0M    rpmfusion-free
3.5M    rpmfusion-free-updates
624K    rpmfusion-nonfree
1.1M    rpmfusion-nonfree-updates
387M    updates
67M     updates-ftp.sjtu.edu.cn

yum就是根据存放在这里的这些rpm的header来检测系统中安装的软件(rpm软件包)是不是最新版本,需不需要update。其实,在每一次使用yum intall xxx命令的使用,yum会自动将/etc/yum.repos.d/目录下.repo文件对应源的header文件下载到本地。

如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all一股脑儿全部清除。

1.清除缓存目录(/var/cache/yum)下的软件包
命令:yum clean packages
2.清除缓存目录(/var/cache/yum)下的 headers
命令:yum clean headers
3.清除缓存目录(/var/cache/yum)下旧的 headers
命令:yum clean oldheaders
4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers
命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 

注意,在这个cache文件夹下,其实,对应这/etc/yum.repo.d/下面的每一个仓库描述文件(或者叫做源描述文件),如果你修改或者删除了了/etc/yum.repo.d/下面的这些文件,这yum clean 就没办法清除这些文件了。

yum makecache就是把服务器的包header信息下载到本地电脑缓存起来。配合yum -C search xxx使用,不用上网检索就能查找软件信息。

  -C                    run entirely from cache, don't update cache

查看和跟新某个软件

查看系统中安装的某个包的版本以及现在可以跟新的最新版本:

yum makecache	//将服务器上最新的软件版本的相关信息(也就是header)下载到本地
yum info xxx 	//查看xxx软件的相关信息

例如想要更新chrome浏览器到最新版本。首先确定安装了chrome的源。

[root@localhost yum.repos.d]# pwd
/etc/yum.repos.d
[root@localhost yum.repos.d]# more ./google.repo 
[google]
name=Google - i386
baseurl=http://dl.google.com/linux/rpm/stable/i386
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub  

以上命令可以看到已经安装了chrome的源文件google.repo在路径/etc/yum.repos.d/下。更新本地的源描述文件。

[root@localhost yum.repos.d]# yum makecache
Loaded plugins: presto, refresh-packagekit
google                                                      |  951 B     00:00     
Metadata Cache Created

以上命令yum makecache就是将服务器上软件软件版本的相关信息下载到了本地yum的cache中。下面就查看chrome的软件版本是否有跟新。当然,刚开始你可能并不知道chrome浏览器在源中的全名是什么,我们可以首先用匹配查找。

[root@localhost yum.repos.d]# yum -C search chrome
Loaded plugins: presto, refresh-packagekit
================================= Matched: chrome =================================
links.i686 : Web browser running in both graphics and text mode
google-chrome-beta.i386 : Google Chrome
google-chrome-stable.i386 : Google Chrome
google-chrome-unstable.i386 : Google Chrome
……

通过查找,大概知道应该叫做google-chrome-xxx,其中beta,stable,unstable是各种发行版而已。下面就看看chrome浏览器有没有跟新。输出结果列举了已经安装的软件(Installed Packages)和服务器源中的最新软件(Available Packages)。

[root@localhost yum.repos.d]# yum info google-chrome*
Loaded plugins: presto, refresh-packagekit
Installed Packages
Name       : google-chrome-beta
Arch       : i386
Version    : 7.0.517.24		//已经安装的软件版本
Release    : 60738
Size       : 73 M
Repo       : installed
From repo  : google
Summary    : Google Chrome
URL        : http://chrome.google.com/
License    : Multiple, see http://chrome.google.com/
Description: The web browser from Google
           : 
	   : Google Chrome is a browser that combines a minimal design with
	   : sophisticated technology to make the web faster, safer, and easier.

Available Packages
Name       : google-chrome-beta
Arch       : i386
Version    : 8.0.552.200	//服务器上现在有的软件版本
Release    : 65749
Size       : 33 M
Repo       : google
Summary    : Google Chrome
URL        : http://chrome.google.com/
License    : Multiple, see http://chrome.google.com/
Description: The web browser from Google
	   : 
	   : Google Chrome is a browser that combines a minimal design with
	   : sophisticated technology to make the web faster, safer, and easier.

Name       : google-chrome-stable
Arch       : i386
Version    : 7.0.517.44
Release    : 64615
Size       : 27 M
Repo       : google
Summary    : Google Chrome
URL        : http://chrome.google.com/
License    : Multiple, see http://chrome.google.com/
Description: The web browser from Google
	   :
	   : Google Chrome is a browser that combines a minimal design with
	   : sophisticated technology to make the web faster, safer, and easier.

Name       : google-chrome-unstable
Arch       : i386
Version    : 9.0.576.0
Release    : 65344
Size       : 34 M
Repo       : google
Summary    : Google Chrome
URL        : http://chrome.google.com/
License    : Multiple, see http://chrome.google.com/
Description: The web browser from Google
	   : 
	   : Google Chrome is a browser that combines a minimal design with
	   : sophisticated technology to make the web faster, safer, and easier.

可以看到,系统中已经安装的版本为google-chrome-beta的7.0.517.24版本。而服务器源上google-chrome-beta的最新版本是8.0.552.200。这样,我们就可以通过yum命令直接升级chrome浏览器。

[root@localhost yum.repos.d]# yum update google-chrome-beta
……

gpg的问题

如果你下载了一个rpm包到本地,然后要用yum命令来安装(当然,你也可以用rpm命令安装)。绝大部分时候,用yum install xxx.rpm时会提示"Package xxx.rpm is not signed"而使安装中断,有两种解决方法:

(1)加上--nogpgcheck选项

yum --nogpgcheck install xxx.rpm

(2)修改/etc/yum.conf

vim /etc/yum.conf 将gpgcheck=1改为gpgcheck=0

yum group

终于知道,原来yum是以group的形式来管理kde,gnome等含有众多软件的包。也许你想将整个KDE都卸载掉,yum的group特性就很重要。

列举出所有安装的group和源中可能的group:

yum grouplist

未解决的问题

如何只安装一个package中的某一个软件呢,例如,我只想安装kdegraphics中的okular这个pdf阅读器?

Details:
Graphics applications, including
* gwenview (an image viewer)
* * kamera (digital camera support)
* * kcolorchooser (a color chooser)
* * kolourpaint4 (an easy-to-use paint program)
* * kruler (screen ruler and color measurement tool)
* * ksnapshot (screen capture utility)
* * okular (a document viewer)